package procsim;

import java.awt.*;

public class PaintRegisters1 extends PaintTab {
    public PaintRegisters1(Paint parent) {
        super(parent);
        // Coordinates
        Design.one3.addCoords(this, 40, 80, 60, 80);
        Design.five3.addCoords(this, 40, 110, 60, 110);
        Design.six3.addCoords(this, 40, 140, 60, 140);
        Design.seven3.addCoords(this, 40, 170, 60, 170);
        Design.R0.addCoords(this, 93, 210, 93, 190);
        Design.R1.addCoords(this, 128, 210, 128, 190);
        Design.Reg1MP1out.addCoords(this, Design.Reg1MP1.getResCoords(50));
        Design.Reg1MP1out.addCoords(this, 210, 125, 210, 170);
        Design.Reg1MP1out.addCoords(this, 210, 170, 410, 170);
        Design.Reg1MP1out.addCoords(this, 410, 170, 410, 260);
        Design.Reg1MP1out.addCoords(this, 410, 260, 450, 260);
        Design.IR16.addCoords(this, 35, 335, 60, 335);
        Design.IR17.addCoords(this, 35, 365, 60, 365);
        Design.IR18.addCoords(this, 35, 395, 60, 395);
        Design.Reg1DCout0.addCoords(this, 160, 309, 180, 309);
        Design.Reg1DCout0.addCoords(this, 180, 309, 180, 225);
        Design.Reg1DCout0.addCoords(this, 180, 225, 260, 225);
        Design.Reg1DCout1.addCoords(this, 160, 325, 190, 325);
        Design.Reg1DCout1.addCoords(this, 190, 325, 190, 289);
        Design.Reg1DCout1.addCoords(this, 190, 289, 260, 289);
        Design.Reg1DCout2.addCoords(this, 160, 341, 200, 341);
        Design.Reg1DCout2.addCoords(this, 200, 341, 200, 305);
        Design.Reg1DCout2.addCoords(this, 200, 305, 260, 305);
        Design.Reg1DCout3.addCoords(this, 160, 357, 210, 357);
        Design.Reg1DCout3.addCoords(this, 210, 357, 210, 321);
        Design.Reg1DCout3.addCoords(this, 210, 321, 260, 321);
        Design.bpdi.addCoords(this, 160, 373, 180, 373);
        Design.bpsi.addCoords(this, 160, 389, 180, 389);
        Design.bxdi.addCoords(this, 160, 405, 180, 405);
        Design.bxsi.addCoords(this, 160, 421, 180, 421);
        Design.zero.addCoords(this, 240, 215, 260, 215);
        Design.zero.addCoords(this, 240, 243, 260, 243);
        Design.zero.addCoords(this, 240, 258, 260, 258);
        Design.zero.addCoords(this, 240, 273, 260, 273);
        Design.Reg1CDout.addCoords(this, 370, 265, 390, 265);
        Design.Reg1CDout.addCoords(this, 390, 265, 390, 310);
        Design.Reg1CDout.addCoords(this, 390, 310, 450, 310);
        Design.R2.addCoords(this, 500, 370, 500, 350);
        Design.Reg1MP3out.addCoords(this, Design.Reg1MP3.getResCoords(40));
        Design.Reg1MP3out.addCoords(this, 590, 285, 590, 165);
        Design.Reg1MP3out.addCoords(this, 590, 165, 630, 165);
        Design.R3.addCoords(this, 681, 225, 681, 205);
        Design.IR18_16.addCoords(this, 390, 70, 450, 70);
        Design.IR21_19.addCoords(this, 390, 120, 450, 120);
        Design.Reg1MP2out.addCoords(this, 550, 95, 590, 95);
        Design.Reg1MP2out.addCoords(this, 590, 95, 590, 115);
        Design.Reg1MP2out.addCoords(this, 590, 115, 630, 115);
        Design.R6.addCoords(this, 500, 180, 500, 160);
        Design.regsel.addCoords(this, Design.Reg1MP4.getResCoords(40));
        Design.Fout.addCoords(this, 585, 320, 630, 320);
        Design.TEMPout.addCoords(this, 585, 350, 630, 350);
        Design.Xout.addCoords(this, 585, 380, 630, 380);
        Design.Yout.addCoords(this, 585, 410, 630, 410);
        Design.R4.addCoords(this, 663, 450, 663, 430);
        Design.R5.addCoords(this, 698, 450, 698, 430);
        Design.regIN.addCoords(this, Design.Reg1MP5.getResCoords(40));

        // Collections
        elements.add(Design.Reg1MP1);
        elements.add(Design.Reg1MP2);
        elements.add(Design.Reg1MP3);
        elements.add(Design.Reg1MP4);
        elements.add(Design.Reg1MP5);
        elements.add(Design.Reg1DC);
        elements.add(Design.Reg1CD);

        lines.add(Design.Fout);
        lines.add(Design.Xout);
        lines.add(Design.Yout);
        lines.add(Design.TEMPout);
        lines.add(Design.IR16);
        lines.add(Design.IR17);
        lines.add(Design.IR18);
        lines.add(Design.one3);
        lines.add(Design.five3);
        lines.add(Design.six3);
        lines.add(Design.seven3);
        lines.add(Design.Reg1MP1out);
        lines.add(Design.Reg1DCout);
        lines.add(Design.Reg1CDout);
        lines.add(Design.Reg1MP2out);
        lines.add(Design.Reg1MP3out);
        lines.add(Design.regsel);
        lines.add(Design.regIN);
        lines.add(Design.IR21_19);
        lines.add(Design.IR18_16);
        lines.add(Design.Reg1DCout0);
        lines.add(Design.Reg1DCout1);
        lines.add(Design.Reg1DCout2);
        lines.add(Design.Reg1DCout3);
        lines.add(Design.bpdi);
        lines.add(Design.bpsi);
        lines.add(Design.bxdi);
        lines.add(Design.bxsi);
        lines.add(Design.R0);
        lines.add(Design.R1);
        lines.add(Design.R2);
        lines.add(Design.R3);
        lines.add(Design.R4);
        lines.add(Design.R5);
        lines.add(Design.R6);
    }
    @Override
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D gnew = (Graphics2D)g;
        Util.saveGraphics(gnew);
        gnew.setColor(Color.GRAY);
        gnew.setStroke(new BasicStroke(2));
        gnew.drawLine(363, 230, 365, 230); // -
        gnew.drawLine(365, 230, 365, 263); // |
        gnew.drawLine(365, 263, 367, 265); // \
        gnew.drawLine(365, 267, 367, 265); // /
        gnew.drawLine(365, 267, 365, 300); // |
        gnew.drawLine(365, 300, 363, 300); // -
        Util.restoreGraphics(gnew);
    }
}
